package com.jiaai.live.api;
import com.jiaai.common.api.model.RPage;
import com.jiaai.exception.ServerException;
import com.jiaai.live.model.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * <p>
 * TODO
 * </p>
 *
 * @author 佳爱网络科技
 * @version V1.0
 * @title ${file_name}
 * @since 2017/10/9
 */
public interface ILiveApi {

    /**
     * 我的直播记录
     * @param anchorId
     * @return
     */
    List<Map> getMyLiveRecords(String anchorId);

    /**
     * 手机播
     * @param curr
     * @param pageSize
     * @return
     * @throws ServerException
     */
    RPage getLiveMobile(Integer curr, Integer pageSize)throws  ServerException;

    /**
     * 附近的直播间
     * @param geoHash
     * @return
     */
    List<HashMap> getNearLives(String geoHash);

    /**
     * 开始直播
     * @param bLive
     * @return 本场直播间的祥情
     */
    RoomInfo startLive(BLive bLive)throws ServerException;



    /**
     * 关闭直播
     * @param idxNo
     * @return 本场直播间的报表
     */
    VLiveReport stopLive(Integer idxNo, String mId)throws ServerException;

    /**
     * 分享直播间
     * @param idxNo
     * @return
     */
    void shareLive(Integer idxNo)throws ServerException;



    /**
     * 更新分享人数
     * @param liveId
     */

    void updateShareNum(int num,Integer liveId)throws ServerException;

    /**
     * 获取直播间祥情
     * @return
     * @throws ServerException
     */
    Map<String, Object> getLiveInfo(Integer liveId,String mId)throws  Exception;

    //踢人或禁言
    /**
     * @param type 1:踢人 2:禁言
     * @return
     */
    boolean block(Integer type, String anchorId, String mId, String mId1);
    //是否有权限踢人和禁言--->mId是anchorId的mId, 或者mId是anchorId的守护
    boolean canBlock(String anchorId, String mId);

    /**
     * 通过推流标识更改直播状态
     * @param status
     * @param stream
     * @return
     * @throws Exception
     */

    void updateStatusByStream(Integer status,String stream)throws  Exception;

    /**
     * 获取直播排行榜, 日榜, 周榜, 总榜
     * @return
     */
    HashMap getAnchorRankings();

    /**
     * 加载直播间排行榜
     * @param liveId
     * @param type
     * @return
     * @throws ServerException
     */
    public List<Map<String,Object>> findRanking(Integer liveId,String type)throws  ServerException;

    /**
     * 退出直播间
     * @param liveId
     * @param mId
     */
    void outLiveHandle(Integer liveId, String mId);

    /**
     * 加入直播间
     * @param liveId
     * @param mId
     */
    Object joinLiveRoom(Integer liveId,String mId);

    /**
     * 查看直播间的在线会员
     * @param liveId
     * @return
     */
    List<Object> getOnlineLiveMems(Integer liveId);



    /**
     * 关注主播
     * @param liveId
     * @param mId
     * @return
     */
    Object followLive(Integer liveId,String mId)throws ServerException;
    /*
    =============================================后台====================================
     */
    Object getJK(Integer curr, LiveQueryVO vo);
    /**
     * 首页上头的统计信息
     */
    Map countHead();

    Object getAll(Integer curr, LiveQueryVO vo);
    Object allLive(Integer curr, LiveQueryVO vo);

    Object getPhoneConfig(Integer liveId);

    void editWatchNum(Integer liveId, Integer watchNum);

    /**
     * 下拉框, 正在直播
     * @return
     */
    Object xlk();

    List<Map> getGuardList(String anchorId);

    /**
     * 首页获取热门和推荐主播列表
     * @return
     */
    List<Map> homePage();

    /**
     * 如果进入直播间后没有在直播,随机返回4条, 按房间收益降序
     * @return
     */
    List<Map> getRand4();

    /**
     * 下拉框
     * @return
     */
    Object tradeXLK();


    /**
     * 重新生成最后一次正在直播间的推流地址
     * @param mId
     * @return
     */
    RoomInfo findLastOnLive(String mId)throws  ServerException;


    /**
     * 获取推荐主播列表
     * @return
     */
    List<Map> selectRecommendLive();

    /**
     * 获取在直播的列表
     * @return
     */
    List<Map> selectOnLives();

    /**
     * 获取我关注的主播
     * @param mId
     * @return
     */
    List<Map> selectMyFollowLive(String mId);



    /**
     * 查询指定用户的守护开通列表
     * @return
     */
    List<Map> selectGuardByUserId(String mId);
    /**
     * 添加修改机器人和虚拟人数
     * @param bLiveVO
     * @return
     */
    Object edit(BLiveVO bLiveVO) throws Exception;
    /**
     * 查询我的送出礼物
     * @param mId
     * @return
     */
//    Object findMyGift(Integer curr,String mId) throws Exception;
//    /**
//     * 查询送给我的礼物
//     * @param mId
//     * @return
//     */
//    Object findGift(Integer curr,String mId) throws Exception;

    Object finINfor(String mId,Integer liveId) throws Exception;
}
